const express = require("express")
const app = express()
const path = require("path")


//方法一:中间件获取body中的请求内容,express内置方法
app.use(express.urlencoded())//处理表单格式的请求内容
app.use(express.json())//处理字符串格式的请求内容

//方法二:手动封装中间件以取代bodyparser
// app.use((req,res,next) => {
//     // console.log(req);
//     // post请求以文件流的形式发送数据,流式读取获取请求体重的数据
//     let dataStr = ""//因为读取的内容以后可能会变,所以需要声明变量
//     req.on("data",(chunk)=>{
//         //数据通过buffer传过来,默认以十六进制字串显示
//         // console.log(chunk);//字符集<Buffer 6e 61 6d 65 3d e5 bc a0 e4 b8 89 26 61 67 65 3d 32 30 26 73 65 78 3d e7 94 b7>
//         dataStr+=chunk.toString()
//     })
//     //在数据读取完成后处理数据格式,目标格式{name:"张三"}
//     req.on("end",()=>{
//         // 方法一:
//         // console.log("ok",dataStr);//ok name=张三&age=20&sex=男
//         // const container = {}
//         // dataStr.split("&").forEach(item=>{
//         //     //item="name=张三"
//         //     const [key,value]=item.split("=")//item=["name","张三"]
//         //     console.log(key);
//         //     container[key]=value
//         // })//["name=张三","age=20","sex=男"].
//         // console.log(container);

//         // 方法二:
//         dataStr.split("&").reduce((prev,current)=>{
//            const [key,value] = current.split("=")
//            prev[key]=value
//            return prev
//         },{})

//     })
//     req.body = dataStr
//     next()//指向下一次路由的回调函数,实现全局中间件循环使用
// })
app.post("/addUser",(req,res)=>{
    //获取前端发送在post请求体里的数据
    // const {
    //     name,
    //     age,
    //     sex
    // } = req.body
    const{
        name,
        age,
        sex
    } = req.body

    //name='张三'&age='18'&sex='男'

    console.log(req.body);

    //name age sex 取反如果是true则返回错误信息提醒,
    //只要有一个是空
    if(!name || !age || !sex){
        return res.send({
            code: 10001,
            mes: "添加失败",
            data: null
        })
    }

    // 如果没有进上面这个判断,说明是符合条件的值,可以响应给前端
    res.send({
        code: 10000,
        mes: "添加成功",
        data: null
    })


})

app.get("/User",(req,res)=>{
    //获取前端发送在post请求体里的数据
    // const {
    //     name,
    //     age,
    //     sex
    // } = req.body
    const{
        name,
        age,
        sex
    } = req.query

    //name='张三'&age='18'&sex='男'

    // console.log(req.body);

    //name age sex 取反如果是true则返回错误信息提醒,
    //只要有一个是空
    if(!name || !age || !sex){
        return res.send({
            code: 10001,
            mes: "添加失败",
            data: null
        })
    }

    // 如果没有进上面这个判断,说明是符合条件的值,可以响应给前端
    res.send({
        code: 10000,
        mes: "添加成功",
        data: null
    })


})

app.put("/updateuser", (req, res) => {
    const {
      name,
      age,
      sex
    } = req.body;
  
    console.log(name, age, sex, "更新");
  
    res.send({
      code: 10000,
      mes: "更新成功",
      data: null
    })
  })

  app.delete("/deleteuser", (req, res) => {
    const {
        name,
        age,
        sex
    } = req.query;
    console.log(name, "删除");
  
    res.send({
      code: 10000,
      mes: "删除成功",
      data: null
    })
  })
  

// 静态资源接口
app.get("/pos",(req,res)=>{
    const filePath = path.resolve(__dirname,"./post请求及手写中间件.html")
//    console.log("filePath",filePath);
    res.sendFile(filePath)
})

app.get("/2",(req,res)=>{
    const filePath = path.resolve(__dirname,"./axios.html")
//    console.log("filePath",filePath);
    res.sendFile(filePath)
})

app.get("/C3",(req,res)=>{
    const filePath = path.resolve(__dirname,"./axios拦截器设置.html")
//    console.log("filePath",filePath);
    res.sendFile(filePath)
})


app.listen(8080,()=>{
    console.log("服务器启动成功,请访问http://127.0.0.1:8080");
})